package day1105.first;

import day1105.common.MyUtil;
import day1105.common.Student;

import java.util.List;

import static day1105.common.MyUtil.printLine;

/**
 * @author Mr.ma
 * @since 2022/11/5 14:12
 * stream流中包含诸多对集合、数组等元素操作的方法，这些方法大致分为两类，即中间操作和终止操作
 * 需要注意的是，stream中的中间操作属于“懒加载”，在没有终止操作时，不会执行，
 * 所以对于中间的操作的联系必然要配合终止操作进行，简单的终止操作有forEach、count、max、min等
 * 1、filter():
 *      过滤方法，需要一个断言型函数式接口作为参数，对集合进行过滤，保留满足条件的元素。
 **/
public class FilterTest {
    public static void main(String[] args) {
        List<Student> studentList = MyUtil.createStudentList();
        studentList.stream().forEach(System.out::println);
        printLine();
        long count = studentList.stream().filter(x -> x.getAge() > 18).count();
        System.out.println("年龄中大于18的人数有：" + count + "人");
        printLine("姓张的学生");
        studentList.stream().filter(x -> x.getName().startsWith("张"))
                .forEach(System.out::println);
        printLine("姓张、名字为三个字的学生");
        studentList.stream().filter(x -> x.getName().startsWith("张"))
                .filter(x -> x.getName().length() == 3)
                .forEach(System.out::println);
        printLine("姓张、名字为三个字、小于等于30岁的学生");
        studentList.stream().filter(x -> x.getName().startsWith("张"))
                .filter(x -> x.getName().length() == 3)
                .filter(x -> x.getAge() <=30)
                .forEach(System.out::println);
    }
}
